// 抽象类(abstract)
// 抽象类不同于接口,抽象类可以包含具体的实现,而接口只能是成员抽象不能实现
// 定义为抽象类之后只能被继承,不能使用new实例化
abstract class Animal {
    eat(food: string): void {
        console.log(`呼噜呼噜的吃,${food}`);
    }
    // 抽象方法是函数签名的方法,不能实现,同时子类中必须实现抽象方法
    abstract run(distance: number): void
}

// 子类继承抽象类父类必须要实现抽象方法
class Dog extends Animal {
    run(distance: number): void {
        console.log(`爬行,${distance}`);
    }
}

const dog = new Dog()
dog.eat('骨头') // 呼噜呼噜的吃,骨头
dog.run(100) // 爬行,100